home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / Peter Lewis / PNL Libraries / MyHandles.p < prev    next >
Encoding:
Text File  |  1994-08-17  |  1.8 KB  |  72 lines  |  [TEXT/PJMM]

  1. unit MyHandles;
  2.  
  3. interface
  4.  
  5.     type
  6.         HandleArray = handle;
  7.  
  8.     function HandleArrayCreate (var h: HandleArray; size: longInt): OSErr;
  9.     procedure HandleArrayDestroy (var h: HandleArray);
  10.     function HandleArrayCount (h: HandleArray): longInt;
  11.     function HandleArrayAppend (h: HandleArray; data: ptr): OSErr;
  12.     procedure HandleArrayGet (h: HandleArray; index: longInt; data: ptr);
  13.     procedure HandleArrayDelete (h: HandleArray; index: longInt);
  14.     procedure HandleArrayReset (h: HandleArray);
  15.  
  16. implementation
  17.  
  18.     uses
  19.         MyAssertions, MyTypes;
  20.  
  21.     function HandleArrayCreate (var h: HandleArray; size: longInt): OSErr;
  22.         var
  23.             err: OSErr;
  24.     begin
  25.         h := NewHandle(SizeOf(longInt));
  26.         err := MemError;
  27.         if err = noErr then begin
  28.             Assert(h <> nil);
  29.             longIntH(h)^^ := size;
  30.         end;
  31.         HandleArrayCreate := err;
  32.     end;
  33.  
  34.     procedure HandleArrayDestroy (var h: HandleArray);
  35.     begin
  36.         DisposeHandle(h);
  37.         h := nil;
  38.     end;
  39.  
  40.     procedure HandleArrayReset (h: HandleArray);
  41.     begin
  42.         Assert(h <> nil);
  43.         SetHandleSize(h, SizeOf(longInt));
  44.     end;
  45.  
  46.     function HandleArrayCount (h: HandleArray): longInt;
  47.     begin
  48.         Assert(h <> nil);
  49.         HandleArrayCount := (GetHandleSize(h) - SizeOf(longInt)) div longIntH(h)^^;
  50.     end;
  51.  
  52.     function HandleArrayAppend (h: HandleArray; data: ptr): OSErr;
  53.     begin
  54.         Assert(h <> nil);
  55.         HandleArrayAppend := PtrAndHand(data, h, longIntH(h)^^);
  56.     end;
  57.  
  58.     procedure HandleArrayGet (h: HandleArray; index: longInt; data: ptr);
  59.     begin
  60.         Assert((h <> nil) & (0 < index) & (index <= HandleArrayCount(h)));
  61.         BlockMove(ptr(ord(h^) + SizeOf(longInt) + (index - 1) * longIntH(h)^^), data, longIntH(h)^^);
  62.     end;
  63.  
  64.     procedure HandleArrayDelete (h: HandleArray; index: longInt);
  65.         var
  66.             err: longInt;
  67.     begin
  68.         Assert((h <> nil) & (0 < index) & (index <= HandleArrayCount(h)));
  69.         err := Munger(h, SizeOf(longInt) + (index - 1) * longIntH(h)^^, nil, longIntH(h)^^, @h, 0);
  70.     end;
  71.  
  72. end.